/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.lsi.sistemasdevendas.view;
import br.com.lsi.sistemasdevendas.bean.ControladorProduto;
import br.com.lsi.sistemasdevendas.model.Produto;
import br.com.lsi.sistemasdevendas.util.Check;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

/**
 *
 * @author lucia
 */
public class ProdutoView extends javax.swing.JDialog {

    Produto produto = new Produto();
    ControladorProduto controladorProduto = new ControladorProduto();
    List<Produto> listaModelProdutos = new ArrayList<>();
    String tipoCadastro;
    
    public ProdutoView() {
         initComponents();
        setLocationRelativeTo(null);
        this.carregarProdutos();
    }

     private void carregarProdutos() {
         String colunas[] = {"Codigo","Nome","Valor", "Fornecedor","Quantidade",};
        listaModelProdutos = controladorProduto.listar();
        String dados[][] = new String[listaModelProdutos.size()][5];
        //CARREGA OS DADOS DA LISTA NA TABELA
        int cont = listaModelProdutos.size();
        for (int i = 0; i < cont; i++) {
            dados[i][0] = listaModelProdutos.get(i).getCodigo();
            dados[i][1] = listaModelProdutos.get(i).getNome();
            dados[i][2] = listaModelProdutos.get(i).getValor();
            dados[i][3] = listaModelProdutos.get(i).getFornecedor();
            dados[i][4] = listaModelProdutos.get(i).getEstoque();
        }
        TableModel model = new DefaultTableModel(dados, colunas);
        tbProdutos.setModel(model);
    }

       private void habilitarCampos() {

        codigo.setEditable(true);
        nome.setEditable(true);
        valor.setEditable(true);
        pesquisar.setEditable(true);
        estoque.setEditable(true);
        salvar.setEnabled(true);
        
    }

    protected void desabilitarCampos() {
        codigo.setEditable(false);
        nome.setEditable(false);
        valor.setEditable(false);
        pesquisar.setEditable(false);
        estoque.setEditable(false);
        salvar.setEnabled(false);
    }
    private void limpar() {
        codigo.setText("");
        nome.setText("");
        valor.setText("");
        estoque.setText("");
        
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btPesquisaProduto = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        novo = new javax.swing.JButton();
        alterar = new javax.swing.JButton();
        excluir = new javax.swing.JButton();
        canselar = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        tbProdutos = new javax.swing.JTable();
        salvar = new javax.swing.JButton();
        codigo = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        valor = new javax.swing.JFormattedTextField();
        estoque = new javax.swing.JFormattedTextField();
        fornecedor = new javax.swing.JTextField();
        pesquisar = new javax.swing.JTextField();
        nome = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        btPesquisaProduto.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/lsi/sistemasdevendas/pictures/Search.png"))); // NOI18N
        btPesquisaProduto.setText("Pesquisar");
        btPesquisaProduto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btPesquisaProdutoActionPerformed(evt);
            }
        });

        jLabel1.setText("Nome:");

        jLabel2.setText("Valor:");

        jLabel3.setText("Fornecedor:");

        jLabel4.setText("Estoque:");

        novo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/lsi/sistemasdevendas/pictures/Add.png"))); // NOI18N
        novo.setText("Novo");
        novo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                novoActionPerformed(evt);
            }
        });

        alterar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/lsi/sistemasdevendas/pictures/Modify.png"))); // NOI18N
        alterar.setText("Alterar");
        alterar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                alterarActionPerformed(evt);
            }
        });

        excluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/lsi/sistemasdevendas/pictures/Delete.png"))); // NOI18N
        excluir.setText("Excluir");
        excluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                excluirActionPerformed(evt);
            }
        });

        canselar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/lsi/sistemasdevendas/pictures/No.png"))); // NOI18N
        canselar.setText("Cancelar");
        canselar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                canselarActionPerformed(evt);
            }
        });

        tbProdutos.setAutoCreateRowSorter(true);
        tbProdutos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Código", "Nome", "Valor", "Fornecedor", "Estoque"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.Object.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, true, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tbProdutos.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
        tbProdutos.getTableHeader().setReorderingAllowed(false);
        jScrollPane2.setViewportView(tbProdutos);

        salvar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/lsi/sistemasdevendas/pictures/Save.png"))); // NOI18N
        salvar.setText("Salvar");
        salvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                salvarActionPerformed(evt);
            }
        });

        codigo.setEditable(false);
        codigo.setEnabled(false);

        jLabel5.setText("Código:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane2)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(pesquisar)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(btPesquisaProduto))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(canselar)
                                .addGap(18, 18, 18)
                                .addComponent(excluir)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(alterar)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(novo)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 24, Short.MAX_VALUE)
                                .addComponent(salvar)))))
                .addGap(20, 20, 20))
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(fornecedor, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel4)
                            .addComponent(estoque, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(12, 12, 12)
                                .addComponent(codigo, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addContainerGap()
                                .addComponent(jLabel5)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(valor, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel5)
                    .addComponent(jLabel2)
                    .addComponent(jLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(codigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(valor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(jLabel4))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(fornecedor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(estoque, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(pesquisar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btPesquisaProduto))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 230, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(canselar)
                    .addComponent(excluir)
                    .addComponent(alterar)
                    .addComponent(novo)
                    .addComponent(salvar))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btPesquisaProdutoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btPesquisaProdutoActionPerformed
       DefaultTableModel tabela = (DefaultTableModel) this.tbProdutos.getModel();
        final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tabela);
        this.tbProdutos.setRowSorter(sorter);
        String text = pesquisar.getText();
        sorter.setRowFilter(RowFilter.regexFilter(text, 1));
    }//GEN-LAST:event_btPesquisaProdutoActionPerformed

    private void novoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_novoActionPerformed
         tipoCadastro = "novo";
         this.habilitarCampos();
    }//GEN-LAST:event_novoActionPerformed

    private void alterarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_alterarActionPerformed
       
    }//GEN-LAST:event_alterarActionPerformed

    private void excluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_excluirActionPerformed
      DefaultTableModel modelo = (DefaultTableModel) tbProdutos.getModel();
        int linha = tbProdutos.getSelectedRow();
        int index = (int) modelo.getValueAt(linha, 0);
        produto = controladorProduto.buscarProduto(index);
        if (Check.checkNull(produto)) {
            JOptionPane.showConfirmDialog(null, "Voce tem certeza que deseja excluir o produto selecionado?", "?", JOptionPane.YES_NO_OPTION);
            controladorProduto.excluir(produto);
            carregarProdutos();
            JOptionPane.showMessageDialog(null, "Produto excluido com suscesso!");
        } else {
            JOptionPane.showMessageDialog(this, "Erro ao Excluir!", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_excluirActionPerformed

    private void canselarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_canselarActionPerformed
        dispose();
        this.desabilitarCampos();
    }//GEN-LAST:event_canselarActionPerformed

    private void salvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_salvarActionPerformed
         if (tipoCadastro.equals("novo")) {
            produto.setCodigo(this.codigo.getText());
            produto.setNome(this.nome.getText());
            produto.setEstoque(this.estoque.getText());
            produto.setValor(this.valor.getText());
            controladorProduto.salvar(produto);
            JOptionPane.showMessageDialog(null, "Produto salvo com suscesso!");
            limpar();
        } else if (tipoCadastro.equals("alterar")) {
            produto.setCodigo(this.codigo.getText());
            produto.setNome(this.nome.getText());
            produto.setEstoque(this.estoque.getText());
            produto.setValor(this.valor.getText());
            controladorProduto.alterar(produto);
            JOptionPane.showMessageDialog(null, "Produto alterado com suscesso!");
            limpar();
        }
        this.desabilitarCampos();
        this.carregarProdutos();
    }//GEN-LAST:event_salvarActionPerformed

    /**
     * @param args the command line arguments
     */
     public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ProdutoView().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton alterar;
    private javax.swing.JButton btPesquisaProduto;
    private javax.swing.JButton canselar;
    private javax.swing.JTextField codigo;
    private javax.swing.JFormattedTextField estoque;
    private javax.swing.JButton excluir;
    private javax.swing.JTextField fornecedor;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextField nome;
    private javax.swing.JButton novo;
    private javax.swing.JTextField pesquisar;
    private javax.swing.JButton salvar;
    private javax.swing.JTable tbProdutos;
    private javax.swing.JFormattedTextField valor;
    // End of variables declaration//GEN-END:variables
}
